/**
 * @file        {{ var_filename }}.h
 * @brief       XXXX
 * @note        XXXX
 * @author      {{ var_author }}({{ var_email }})
 * @date        {{ var_time }}
 * @version     {{ var_version }}
 */
 
#include "{{ var_filename }}.h"

#if (1)
#include "ofc/ofc_types.h"
#else
#define False 0
#define True  1
#define NULL  0

typedef unsigned char Bool;
#endif

typedef struct T{{ var_proj_name }}EsmTag T{{ var_proj_name }}Esm;

typedef void (*T{{ var_proj_name }}EsmStateFunction)(T{{ var_proj_name }}Esm *self, void *user_param);


struct T{{ var_proj_name }}EsmTag
{
    T{{ var_proj_name }}EsmStateFunction state_function_;

    void *user_param;
};

static T{{ var_proj_name }}Esm g_easy_state_machine_ = {0};

/******************** 条件判断函数 ***********************/

{{ var_cond_code }}


/******************** 状态执行函数 ***********************/

{{ var_state_code }}


/******************** 任务执行函数 ***********************/

void {{ var_proj_name }}EsmInit(void *user_param)
{
    g_easy_state_machine_.user_param = user_param;
}

void {{ var_proj_name }}EsmRunOnce(void)
{
    if (g_easy_state_machine_.state_function_ != NULL)
    {
        g_easy_state_machine_.state_function_(&g_easy_state_machine_, g_easy_state_machine_.user_param);
    }
}

void {{ var_proj_name }}EsmDone(void)
{
    g_easy_state_machine_.state_function_ = NULL;
    g_easy_state_machine_.user_param = NULL;
}
